插值属性值

当希望动态设置属性的目标值并随着时间的推移将当前值插值到目标值时,请使用属性目标插值器 (Property Target Interpolator)。例如,使用属性目标插值器 (Property Target Interpolator) 可以将仪表指针的旋转角度插值到目标值中,无论其当前位置如何。

属性目标插值器 (Property Target Interpolator) 模拟永远不会超调的弹簧阻尼系统的行为。您可以使用加速 (Acceleration) 属性设置弹簧移动物体所用的力,并使用阻力 (Drag) 属性设置阻尼系数。加速 (Acceleration) 属性的值越大,该属性就越快达到其新值。阻力 (Drag) 属性的值越大,最大插值速度就越小。

通过完成教程学习如何使用属性目标插值器 (Property Target Interpolator)。请参阅教程:插值属性值

插值属性值

要插值属性值:

  1. 工程 (Project) 中,选择包含要插值的属性的节点。
    例如,在 Kanzi Studio 中,打开存储在 <KanziWorkspace>/Tutorials/Data sources/Completed/Tool_project 目录中的工程,然后选择RootPage > Gauges > SpeedNeedle 节点。当数据源中的速度值发生变化时,您可以使用属性目标插值器 (Property Target Interpolator)SpeedNeedle 节点从其上一个位置逐渐移到当前位置。要了解如何创建该工程,请参阅教程:创建仪表教程:从数据源获取应用程序数据
  2. 节点组件 (Node Components) > 动画 (Animation) 区域中点击+ 添加动画 (+ Add Animation) 并选择属性目标插值器 (Property Target Interpolator)
  3. 节点组件 (Node Components) > 动画 (Animation) 区域的 属性目标插值器 (Property Target Interpolator) 中设置:

    当更改您在插值属性类型 (Interpolated Property Type) 中设置的属性的值时,属性目标插值器 (Property Target Interpolator) 会随着时间的推移将当前值插值到目标值中。在本例中,属性目标插值器 (Property Target Interpolator) 会插值Speed 属性的值,以改变Speed 指针的位置。要更改插值,请在属性目标插值器 (Property Target Interpolator) 中调整加速 (Acceleration)阻力 (Drag) 属性的值。

插值 3D 节点的旋转角度

要插值 3D 节点的旋转角度:

  1. 素材库 (Library) 按下 Alt 并右键点击 属性类型 (Property Types) 中,选择属性类型 (Property Type) 并创建一个浮点属性类型。
    例如,创建一个名为Interpolator 的浮点属性类型。
  2. 工程 (Project) 中,选择或创建要插值其旋转角度的 3D 节点。
    例如,选择您工程中的速度仪表指针。
  3. 节点组件 (Node Components) > 动画 (Animation) 区域中点击+ 添加动画 (+ Add Animation) 并选择属性目标插值器 (Property Target Interpolator)
  4. 节点组件 (Node Components) > 动画 (Animation) 区域的 属性目标插值器 (Property Target Interpolator) 中设置:
  5. 工程 (Project) 中,选择要插值其旋转角度的 3D 节点,并在属性 (Properties) 中添加绑定 (Bindings) 属性,然后在 绑定参数编辑器 (Binding Argument Editor) 中设置:

    点击保存 (Save)

  6. 属性 (Properties) 中点击+ 添加绑定 (+ Add Binding) 并在绑定参数编辑器 (Binding Argument Editor) 中设置:

    点击保存 (Save)

    当更改用于控制旋转角度的属性的值时,属性目标插值器 (Property Target Interpolator) 会随着时间的推移将值逐渐更改为目标值。要更改插值,请在属性目标插值器 (Property Target Interpolator) 中调整加速 (Acceleration)阻力 (Drag) 属性的值。

获取关于已完成插值的信息

属性目标插值器 (Property Target Interpolator) 完成属性的插值时,会发送一条消息。您可以拦截消息,以了解它插值的属性何时到达其终值。

要获取关于已完成的插值的信息:

  1. 为要插值的属性添加并配置属性目标插值器 (Property Target Interpolator)。请参阅插值属性值
  2. 工程 (Project) 中,选择一个节点,以获取属性目标插值器 (Property Target Interpolator) 所完成的插值的相关信息。
    例如,如果在 SpeedNeedle 节点中使用属性目标插值器 (Property Target Interpolator),但希望获取RootPage 节点中已完成的插值的相关信息,请选择RootPage 节点。
  3. 节点组件 (Node Components) > 触发器 (Triggers) 部分中,右键点击并选择添加触发器 (Add Trigger) > 动画 (Animation) > 插值完成 (Interpolation Completed)
    插值完成 (Interpolation Completed) 触发器会拦截属性目标插值器 (Property Target Interpolator) 在完成属性插值时发送的消息。
  4. 节点组件 (Node Components) > 触发器 (Triggers) 部分中,在您在上一步添加的 插值完成 (Interpolation Completed) 触发器中,点击触发器设置 (Trigger Settings) 并将消息源 (Message Source) 属性设置为具有您要了解它何时完成插值的属性目标插值器 (Property Target Interpolator) 的那个节点。
    例如,如果希望在RootPage 节点中了解属性目标插值器 (Property Target Interpolator) 何时在 SpeedNeedle 中完成属性插值,请在触发器设置 (Trigger Settings) 中将消息源 (Message Source) 设置为 SpeedNeedle 节点。
  5. 节点组件 (Node Components) 中,为插值完成 (Interpolation Completed) 触发器添加要在属性目标插值器 (Property Target Interpolator) 发送消息以表明它完成了属性值插值时执行的动作。
    例如,添加起始动画回放 (Start Animation Playback) 动作以开始动画,或者添加设置属性 (Set Property) 以设置属性的值。

在 API 中使用 属性目标插值器 (Property Target Interpolator)

要创建属性目标插值,并设置其目标属性和插值设置,请执行以下代码:

//创建属性目标插值。
PropertyTargetInterpolatorSharedPtr interpolator = PropertyTargetInterpolator::create(domain, "player");
// 设置在插值器将附到的节点上,需要被插值的属性的类型名称
interpolator->setInterpolatedPropertyType(Node2D::OpacityProperty.getName());
// 调整插值设置。
interpolator->setAcceleration(2.0f);
interpolator->setDrag(1.0f);

要将属性目标插值器附加到节点,请执行以下代码:

node->addNodeComponent(interpolator);

要创建属性目标插值时间线,并设置其目标属性和插值设置,请执行以下代码:

PropertyTargetInterpolationTimelineSharedPtr timeline = PropertyTargetInterpolationTimeline::create(domain, ".", Node2D::OpacityProperty, PropertyFieldWhole, 2.0f, 1.0f);

要为属性目标插值时间线创建回放,请执行以下代码:

SceneGraphTimelinePlaybackContext context(*node);
TimelinePlaybackSharedPtr playback = timeline->createPlayback(context);

要将属性目标插值时间线的回放添加到时钟,请执行以下代码:

domain->getRootTimelineClock()->addTimelinePlayback(playback);

有关详细信息,请参阅 API reference 中的 PropertyTargetInterpolatorPropertyTargetInterpolationTimelinePropertyTargetInterpolationTimelinePlayback 类。

另请参阅

教程:插值属性值

创建属性驱动的动画

动画